package com.ruoyi.questionnaire.controller;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.questionnaire.domain.QuestionnaireQuestion;
import com.ruoyi.questionnaire.service.IQuestionnaireQuestionService;

/**
 * 问卷题目管理控制器
 * 
 * 提供问卷题目的增删改查接口
 * 
 * @author ruoyi
 * @date 2024-01-01
 */
@RestController
@RequestMapping("/questionnaire/question")
public class QuestionnaireQuestionController extends BaseController {
    
    /** 问卷题目服务 */
    @Autowired
    private IQuestionnaireQuestionService questionService;

    /**
     * 查询题目列表
     * 
     * @param questionnaireId 问卷ID（可选，不传则查询所有题目）
     * @return 题目列表和总数
     */
    @GetMapping("/list")
    public TableDataInfo list(@RequestParam(required = false) Long questionnaireId) {
        List<QuestionnaireQuestion> list;
        if (questionnaireId != null) {
            // 查询指定问卷下的题目
            list = questionService.selectQuestionnaireQuestionList(questionnaireId);
        } else {
            // 查询所有题目（包含问卷标题信息）
            list = questionService.selectAllQuestionnaireQuestionList();
        }
        
        return getDataTable(list);
    }

    /**
     * 根据ID查询题目详情
     * 
     * @param id 题目ID
     * @return 题目对象
     */
    @GetMapping("/{id}")
    public AjaxResult get(@PathVariable Long id) {
        return success(questionService.loadQuestionWithOptions(id));
    }

    /**
     * 新增题目
     * 
     * @param question 题目对象
     * @return 操作结果
     */
    @PostMapping
    public AjaxResult add(@RequestBody QuestionnaireQuestion question) {
        // 设置默认值：默认必填
        if (question.getRequired() == null) {
            question.setRequired(true);
        }
        
        // 改进排序逻辑：如果没传排序号，自动计算下一个排序号
        if (question.getOrderNum() == null) {
            // 获取当前问卷下最大的排序号
            Integer maxOrder = questionService.getMaxOrderNumByQuestionnaireId(question.getQuestionnaireId());
            question.setOrderNum(maxOrder != null ? maxOrder + 1 : 1);
        }
        
        return toAjax(questionService.insertQuestionnaireQuestion(question));
    }

    /**
     * 修改题目
     * 
     * @param question 题目对象
     * @return 操作结果
     */
    @PutMapping
    public AjaxResult edit(@RequestBody QuestionnaireQuestion question) {
        return toAjax(questionService.updateQuestionnaireQuestion(question));
    }

    /**
     * 根据ID删除题目
     * 
     * @param id 题目ID
     * @return 操作结果
     */
    @DeleteMapping("/{id}")
    public AjaxResult remove(@PathVariable Long id) {
        return toAjax(questionService.deleteQuestionnaireQuestionById(id));
    }

    /**
     * 批量删除题目
     * 
     * @param ids 题目ID数组
     * @return 操作结果
     */
    @DeleteMapping("/batch")
    public AjaxResult removeBatch(@RequestBody Long[] ids) {
        return toAjax(questionService.deleteQuestionnaireQuestionByIds(ids));
    }

    /**
     * 批量删除某问卷下所有题目
     * 
     * @param questionnaireId 问卷ID
     * @return 操作结果
     */
    @DeleteMapping("/byQuestionnaire/{questionnaireId}")
    public AjaxResult removeByQuestionnaire(@PathVariable Long questionnaireId) {
        return toAjax(questionService.deleteQuestionnaireQuestionByQuestionnaireId(questionnaireId));
    }
} 